// 云函数入口文件
const cloud = require('wx-server-sdk');
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }); // 使用当前云环境
const db = cloud.database();
const _ = db.command;

// 获取当前数据库中的最大 problemid
async function getMaxProblemId() {
  try {
    const maxIdResult = await db.collection('problems')
      .orderBy('problemid', 'desc')  // 按照 problemid 递减排序，获取最大 id
      .limit(1)
      .get();
    
    // 如果数据库中没有题目，则返回 problemid 为 0
    const maxId = maxIdResult.data.length ? maxIdResult.data[0].problemid : 0;
    console.log('当前最大 problemid:', maxId);
    return maxId;
  } catch (err) {
    console.error('获取最大 problemid 失败:', err);
    return 0;
  }
}

// 生成题目函数
function generateProblem(id, difficulty) {
  const numOperands = difficulty === 1 ? 2 : 3;
  const maxNumber = difficulty === 1 ? 10 : 100;
  const operations = difficulty === 3 ? ['+', '-', '*', '÷'] : ['+', '-'];

  let operands = [];
  let operators = [];

  // 生成操作数
  for (let i = 0; i < numOperands; i++) {
    operands.push(Math.ceil(Math.random() * maxNumber));
  }

  // 生成操作符
  for (let i = 0; i < numOperands - 1; i++) {
    operators.push(operations[Math.floor(Math.random() * operations.length)]);
  }

  // 构建表达式
  let question = operands[0].toString();
  for (let i = 1; i < operands.length; i++) {
    question += ` ${operators[i - 1]} ${operands[i]}`;
  }

  // 计算答案，替换 ÷ 为 /
  let answer;
  try {
    answer = new Function('return ' + question.replace('÷', '/'))();
    // 为避免浮点数精度问题，可以根据需要进行四舍五入
    answer = Math.round(answer * 100) / 100;
  } catch (err) {
    console.error('表达式解析失败:', question, err);
    return null;
  }

  return {
    problemid: id,
    difficulty: difficulty,
    question: question,
    answer: answer
  };
}

// 主函数：生成题目并存储到数据库
exports.main = async (event, context) => {
  console.log('Hello World'); // 确认云函数被调用
  console.log('接收到的事件对象:', event);

  const { numQuestions, difficulty } = event;  // 获取输入参数：题目数量和难度
  console.log(`生成题目数量: ${numQuestions}, 难度等级: ${difficulty}`);

  // 输入参数验证
  if (typeof numQuestions !== 'number' || numQuestions <= 0 || numQuestions > 500) {
    console.error('无效的 numQuestions 参数:', numQuestions);
    return { success: false, error: 'numQuestions 必须是 1 到 500 之间的数字。' };
  }

  if (![1, 2, 3].includes(difficulty)) {
    console.error('无效的 difficulty 参数:', difficulty);
    return { success: false, error: 'difficulty 必须是 1（简单）、2（中等）或 3（困难）。' };
  }

  let maxProblemId = await getMaxProblemId();  // 获取当前最大 problemid
  const problems = [];

  // 生成题目
  for (let i = 1; i <= numQuestions; i++) {
    const problem = generateProblem(maxProblemId + i, difficulty);
    if (problem) {
      problems.push(problem);
      console.log(`生成题目 ${problem.problemid}: ${problem.question} = ${problem.answer}`);
    } else {
      console.error(`生成题目失败，problemid: ${maxProblemId + i}`);
    }
  }

  if (problems.length === 0) {
    console.error('未生成任何题目。');
    return { success: false, error: '未生成任何题目。' };
  }

  // 逐一将题目插入数据库
  try {
    for (const problem of problems) {
      await db.collection('problems').add({
        data: problem
      });
      console.log(`成功插入题目 ${problem.problemid}`);
    }
    console.log('所有题目插入成功');
    return { success: true };
  } catch (err) {
    console.error('题库生成失败:', err);
    return { success: false, error: err.message || '题库生成失败。' };
  }
};